perm filename IBMQB.F4[MU5,LCS] blob sn#107297 filedate 1974-06-18 generic text, type T, neo UTF8
	SUBROUTINE RUNIT
C******************************
      DIMENSION VY(30),VZ(30),XT(10),IVG(8),PX1(10)
	1,IPT(10,31)
 	COMMON /X/ P(30),J,L,CNT(10),BT,MK,VX(35),PL(30),DF,IXIN,NINS,TF,
	1 ROFF(10),V(2000),NP(10),NCNT(10,32),INST(11),DUR(11),IALL,
     1DURX,AMPFAC,BNW(40),IT(30),I,OP1,INUM(10),BG(80),INP(72),TP,
	1NWZ,CVTX,ISCA(12),IDAT(11),IQ(25),SCAL(86),MU5(14)
	1,LIST(78),ALL(10,31),NWRITE
	EQUIVALENCE (P1,P(1)),(P2,P(2)),(P3,P(3)),(VZ2,VZ(2)),(P4,P(4))
	DATA IAMP/0/,IT3/0/,K/1/,T6/10000./,NW/1/,A/0/,
	1NWX/0/,TDUR/0/,T2/1./,T4/1./,T5/0/,PR/0/,IVG/'GENA','GENB','GENC',
	1'GEND','VARA','VARB','VARC','VARD'/,BLA/' '/,CHN/0/,RTF/.05/
	NWRITE=21
	J=1
	P1=0
	MK=0
	NWZZ=0
	BG(NINS+1)=19999.
      T6=10000.   
      DO 2118 K=1,NINS  
	M=NP(K)
      IT(K)=0 
	IPT(K,31)=0
	NCNT(K,31)=1
	DO 2118 L=1,M
	NCNT(K,L)=1
2118	IPT(K,L)=0
	DO 5013 K=1,IXIN
5013	X=RAND(0.0,0.0)
	IF(IALL.EQ.-1)GO TO 600
	IL=NP(KZY)
	X=DUR(KZY)
	DO 6002 K=1,NINS
	IF(DUR(K).LT.0)DUR(K)=X
6002	IF(NP(K).LT.IL)NP(K)=IL
C   OUTPUT LOOP FROM HERE ON  
600      IL=0     
	NWX=NWX+1
      MK=MK+1     
      Y=BNW(NW)   
723      IL=IL+1  
3723      Z=V(IL)     
      IF(Z.EQ.-19899.)GO TO 732
      IF(Z.NE.-9900.-Y)GO TO 723     
2723      IL=IL+1   
729	K=IL+2
	RD=V(K)
	IF(RD.EQ.-67.)GO TO 3726
	LK=V(IL)/10000.+.2
	IF(LK.GE.98)GO TO 7700
	LP=V(IL)-LK*10000
C   LK=INST #   LP=PARAM #
	LN=IPT(LK,LP)
	IPT(LK,LP)=IL+2
	IF(RD.EQ.-66.)GO TO 726
	IF((RD.EQ.-55.).OR.(RD.EQ.-56.))GO TO 1726

2727	ML=IPT(LK,LP)
CC	IF(IDALL.OR.LK.LT.KZY)GO TO 3727
	IF(ALL(LK,LP))GO TO 3727
	M=LK+1
C  'ALL' EFFECTS ONLY HIGHER INST. NUMBS.
	DO 4727 KL=M,NINS
	IF(NP(KL).LT.LP.AND.LP.LT.31)NP(KL)=LP
	IPT(KL,LP)=ML
	NCNT(KL,LP)=10000
	IF(DUR(KL))DUR(KL)=1000.
C  ASSUMES THAT DURATIONS ARE SET IN 'NOTES'.
C******** MAY 13,71 RHY REP. FEATURE OMITTED.
CC4727	IF(LP.EQ.2)N2(KL)=0
4727	ALL(LK,LP)=-1.
C  AFTER 'ALL' IS USED ONCE IT WORKS LIKE DUPL OR REP.
	GO TO 2150
C 'MOVE' WITH 'ALINS' CAN ALTER 'RESETS'.
3727	IF(V(IL).NE.V(LN-1).OR.LN.EQ.0)GO TO 727
C ************  JAN 20 ***********
	DO 1727 L=1,NINS
	DO 1727 KL=1,NP(L)
	IF(LN.NE.IPT(L,KL))GO TO 1727
	NCNT(L,KL)=10000
CC	IPT(L,KL)=IL+1
C ******* JAN 29,70
	IPT(L,KL)=ML
C RESETS POINTERS FOR DUPL AND REP INSTS.
1727	CONTINUE
727	NCNT(LK,LP)=10000
CC	IF(LP.EQ.2)N2(LK)=0
2150	IF(K.LT.0)GO TO 4726
	IL=IL+V(IL+1)+1.3
	IF(V(IL).LT.0)GO TO 3723
	GO TO 729
726	RB=V(IL+3)
	K=RB/10000.
	L=RB-K*10000
	IPT(LK,LP)=IPT(K,L)
	GO TO 2727
3726	LK=V(IL)
	M=V(K+1)
	K=-1
	KL=NP(M)
	DO 4726 L=1,KL
	LP=L
	IPT(LK,L)=IPT(M,L)
	IF(IPT(M,L).NE.0)GO TO 2727
4726	CONTINUE
	IPT(LK,31)=IPT(M,31)
	K=0
	GO TO 2150
C   ABOVE IS FOR DUPLICATION ROUTINE
7700	T2=V(IL+4)
	T1=V(IL+3)
	TBG=Y
	TDUR=V(IL+2)
	AC=2.*TDUR/(T1+T2)
	AC=2.*(TDUR-T1*AC)/AC**2
8700	IF(TDUR.EQ.0)TDUR=10000.
	T5=1.
	T6=TBG+TDUR
	IT3=1.
	IF(LK.EQ.98)IT3=IL+2
	T4=1.
	GO TO 2150
1726	IF(V(IL-1).GT.-10000.)GO TO 2727
	RA=BT
	K=IL-1
2726	V(K)=-9900.-RA
	L=K+5
	RB=V(L)+V(L-1)
	V(L-1)=RA
	K=K+V(K+2)+2
	IF((V(K).GT.-10000.).OR.(V(K+1).NE.V(IL)).OR.
	1 (V(K).NE.-9900.-RB))GO TO 2727
	RA=RA+V(L)
	DO 5726 L=1,NWZ
5726	IF(RA.EQ.BNW(L))GO TO 2726
	NWZ=NWZ+1
	BNW(NWZ)=RA
	GO TO 2726
C  CONVERTS BG TIME OF NOTE NUM TO REAL TIME.  DOESN'T WORK WITH -66!!
C   NOW WE BEGIN ON!! NOTE NUM. NOT AFTER NOTE NUM.
732	IF(NWZ.LT.1)NWZ=1
	DO 2602 K=NW,NWZ
2602	BNW(K)=BNW(K+1)
	NWZ=NWZ-1
	IF(NWZ.EQ.0)GO TO 2111
	IF(NWZZ.EQ.1)GO TO 5111
	NWZZ=1
	IF(NWZ.EQ.1)GO TO 1111
	DO 3111 K=1,NWZ
	IF(BNW(K).LT.1000.)GO TO 3111
	X=BNW(NWZZ)
	BNW(NWZZ)=BNW(K)
	BNW(K)=X
	NWZZ=NWZZ+1
3111	CONTINUE
5111	IF(NWZZ.EQ.NWZ)GO TO 1111
	L=NWZZ+1
	X=BNW(NWZZ)
	DO 4111 K=L,NWZ
	IF(BNW(K).GT.X)GO TO 4111
	RA=BNW(K)
	BNW(K)=X
	X=RA
4111	CONTINUE
	BNW(NWZZ)=X
	GO TO 1111
2111	NWZ=-1
C  ABOVE ORDERS BNW DATA TO SAVE TIME AT 10 ON PG2.
CC1111      IF(NWX.NE.1)GO TO 1486
1111	K=NWX-1
      IF(NWX.NE.1)GO TO 1486
2      PRINT 111,I,IXIN,CVTX,TF
111      FORMAT(//' ***** SCORE *****',10X,
	1'V ARRAY=',I4,'/2000   RANDOM NUMBER =',I6,4X,'SRATE=',F6.0,
	14X,'TEMPO FACTOR=',F6.2/)
1486      IF((NWX.GT.1).AND.(IT(J).NE.-3))PRINT 3154,K,Y  
      IF(IT(J).EQ.-3)PRINT 5154,K,BX,INST(J) 

      DO 602 K=1,NINS   
	IF(DUR(K).LT.0)CALL EXIT
48	LK=INST(K)
C**********************
	IF(NCNT(K,31).NE.10000.AND.NWX.GT.1)GO TO 8826
	IJ=IPT(K,31)
	NCNT(K,31)=1
	X=0
	IF(IJ.NE.0)X=V(IJ+2)
	RA=DUR(K)
	IF(RA.GT.10000.)GO TO 83
      PRINT 5396,LK,INUM(K),X,RA
	GO TO 8826
5396      FORMAT(6XA4,'= INST NUM',I3,12X,
	1'RANDOM TF =',F4.2,9X,'DURATION =',F6.2,'"') 
7396      FORMAT(6XA4,'= INST NUM',I3,12X,
	1'RANDOM TF =',F4.2,9X,'DURATION =',F5.0,'NOTES')
4396  FORMAT(12X'% RANDOM RESTS   DUR=',F7.3,'", FROM',F6.3,' TO',F6.3)
485      FORMAT(35X'% RANDOM RESTS = ',F4.2)     
83      RA=RA-10000.
      PRINT 7396,LK,INUM(K),X,RA    
8826	IF(NCNT(K,1).NE.10000)GO TO 602
	IJ=IPT(K,1)
	NCNT(K,1)=1
	X=V(IJ+3)
	IF(V(IJ).LT.6.)GO TO 7826
	PRINT 4396,X,V(IJ+4),V(IJ+5)
	GO TO 602
7826	PRINT 485,X
602	CONTINUE
715	IF(IT3.NE.1.)GO TO 1602
	RA=T1*TP
	RB=T2*TP
      PRINT 6154,RA,RB,TDUR  
      IT3=0  
1602	IF(NWX.EQ.1)GO TO 315
	IF(IT(J).EQ.-3)GO TO 10
C*************************
6154      FORMAT(' TMP=',F7.3,' TO',F8.3,' DURING',F6.2,' SECS.'/)
5154      FORMAT(/' << CHANGE',I3,' BEGINS ON NOTE',F5.0,2XA4,' >>'/)
902      FORMAT(2XA4/)  
3154      FORMAT(/' <<   BASIC TIME OF CHANGE',I3,' IS',F8.3,'" >>'/)
4154      FORMAT(' THE FIRST',F9.4,'" ARE OMITTED'/)  
C*********************
	IT(J)=IT(J)/10
	GO TO 10
315	IF(OP1.NE.0)PRINT 4154,OP1 
1601  IF(NWX.GT.1) GO TO 10    
	IF(TF.GT.10.)TF=TF/60.
	TF=1000./TF
9926      DO 5015 K=1,NINS    
	IQ(K)=BG(K)*10000.
      BG(K)=0
	INP(K)=0
      PX1(K)=0     
5015      CNT(K)=0
      BW=0 
	CVTX=511./CVTX
      GO TO 500   

10      M=0 
      JC=0  
	IF(NWZ.EQ.-1)GO TO 1740
      DO 740 K=1,NWZZ    
      X=BNW(K)    
	IF(X.GT.BT.OR.X.LE.BW.OR.BW.LT.0)GO TO 2740
	IT(J)=IT(J)*10
      NW=K  
      GO TO 600   
2740	IF((X.LT.1000.).OR.(X-J*10000.NE.CNT(J)+1))GO TO 740
      X=BT+PR     
      NW=K  
	BX=CNT(J)+1.
      IT(J)=-3    
      GO TO 600   
740      CONTINUE 
1740      IT(J)=0     
31      KL=1
2031      CNT(J)=CNT(J)+1   
      ICT=CNT(J)  
      NPA=NP(J)   
      P1=PX1(J)  
      IF(BT.GE.DUR(J))GO TO 5174    
	IF(IQ(J).EQ.0)GO TO 200
	P2=-IQ(J)/10000.
	IQ(J)=0
	CNT(J)=-1
	ICT=-1
	GO TO 4203

C   MK IS FLAG FOR RESTS
200	MK=0
      IF((BT.EQ.0.AND.J.EQ.1).OR.IPT(J,1).EQ.0)GO TO 203    
	KN=IPT(J,1)
	IJ=V(KN)
	IF(IJ.EQ.5)GO TO 1203
  	Z=(BT+9900.+V(KN-2))/V(KN+2)
	IF(Z.GT.1.)Z=1.
	Y=V(KN+3)
	X=(V(KN+4)-Y)*Z+Y
	IF(X.LE.0)IPT(J,1)=0
	GO TO 204
1203	X=V(KN+3)
204	Y=RAND(0.0,1.0)
	IF(Y-X.LT.0)MK=-1

203	DF=1.
C  DUTY FACTOR ONLY SET IN SUBR.
      DO 2155 L=2,NPA
	IJ=IPT(J,L)
	VX(L)=0
	PM=1.
	IF(IJ.GT.1)GO TO 2157
	P(L)=0
	GO TO 2155
2157	LN=IJ+2
	NM=V(IJ-1)+LN-4
	NL=V(IJ)
	KN=NL/(-11)
	IF(KN.EQ.0)GO TO 1100
	GO TO (61,62,62,62,65,65),KN
1100	IF(V(IJ+1).EQ.1.)GO TO 1200
	ML=3
1900	KA=1
	VY(1)=0
	DO 1156 K=LN,NM,ML
	VY(KA+1)=V(K)+VY(KA)
1156	KA=KA+1
	X=RAND(0.0,1.)
	DO 1157 K=2,11
	IF(X.GT.VY(K))GO TO 1157
	KL=K-1
	GO TO 1400
1157	CONTINUE
1400	LN=IJ+3*KL
	RA=V(LN)
	RB=V(LN+1)
	PAR=RAND(RA,RB)
1300	IF(NL.EQ.-1)GO TO 1155
	PM=2.
1061	ML=PAR
	PAR=ML
	GO TO 1155
1200	PAR=V(IJ+2)
	GO TO 1300
61	X=P2
	CALL SUBR
C   SET CVT(IPAR) TO 1,0 OR -1 IN SUBR FOR DUR,--, OR FREQ.
	IF(L.EQ.2)GO TO 4203
	PM=PL(L)
CCC**** JUN 29,71	IF(X.NE.P2)PR=P2
	IF(X.EQ.P2)GO TO 2155
	PR=P2
	PP2=P2
	GO TO 2155
C  ABOVE IS FOR P2 CHANGES IN SUBROUTINE
C   TF,TEMPO WILL AFFECT P2 ONLY WHEN P2 CALLS THE SUBR.  IF P2 IS CHANGED BY OTHER
C   CALLS ON SUBR. ALL TEMPO CHANGES WILL BE IGNORED!! (THEN DUR. IN SECS. MUST BE SET TO 'REAL TIME'.)
C   FOLLOWING IS FOR REPEATED RHYTHMIC VALUES.  
62      KL=NCNT(J,L)+1
      IF(KL.GT.V(IJ+1))KL=1 
      PAR=V(IJ+KL+1)
CC7157      IF(L.NE.2.OR.PAR.LT.1000..OR.KN.NE.2)GO TO 4157  
CC    LN=PAR/1000. 
CC    PAR=PAR-LN*1000
CC	ML=N2(J)
CC    IF(ML.GT.0)GO TO 5157   
CC	ML=LN 
CC5157    ML=ML-1 
CC    IF(ML.NE.0)KL=KL-1
CC	N2(J)=ML
4157      NCNT(J,L)=KL

	IF(NL.EQ.-45)DF=PAR
	IF(KN.NE.3)GO TO 1155
	IF(PAR.EQ.86.)GO TO 5174
	PM=2.
	IF(PAR.EQ.85.)MK=-1
      GO TO 5155  
65	W=-9900.-V(IJ-3)
C  W=BG TIME OF MOVE.
	X=V(IJ-1)
	IF(NL.EQ.-56.OR.NL.EQ.-58)PM=2.
	Z=(BT-W)/V(IJ+1)
C  Z= % OF WAY THROUGH.
	IF(Z.GT.1.)Z=1.
	Y=V(LN)
	W=V(IJ+3)
	IF(X.EQ.8.)W=V(IJ+4)
	IF(NL.LT.-58)GO TO 16002
	PAR=(W-Y)*Z+Y
	IF(X.EQ.8.)GO TO 1600
2600	IF(PM.EQ.1.)GO TO 1155
	GO TO 1061
16002	PAR=(W-Y+1.)**Z-1.+Y
	IF(W-Y)PAR=(Y-W+1.)**(1.-Z)-1.+W
	IF(X.NE.8.)GO TO 2600
	W=V(IJ+5)
	Y=V(IJ+3)
	X=(W-Y+1.)**Z-1.+Y
	IF(W-Y)X=(Y-W+1.)**(1.-Z)-1.+W
	GO TO 16003
C  NEXT IS FOR MOVING RAND RANGES.
1600	W=V(IJ+3)
	X=(V(IJ+5)-W)*Z+W
16003	PAR=RAND(PAR,X)
	GO TO 2600
4155	K=(PAR-9999.0)*100.+.1
	P(L)=P(K)
	PM=PL(K)
	VX(L)=VX(K)
	GO TO 2155
C   ANY # OVER 9999. REPEATS ANOTHER PARAM.(9999.21 REPEATS P21)
1155	IF(PAR.GT.9999.)GO TO 4155
5155	P(L)=PAR
	ML=V(IJ-1)-2.
C  ABOVE WAS '-1' AT END. **** JULY 20,71
	VX(L)=V(ML+IPT(J,L))
	IF(L.EQ.2)GO TO 4203

2155	PL(L)=PM
	GO TO 1170
4203      PR=P2 
	RA=1.
	RD=PR
      IF(T5.EQ.0)GO TO 8203   
	IF((IT3.LE.1).OR.(BT.LT.TBG+TDUR))GO TO 6203
3155	IT3=IT3+3
	TBG=TBG+TDUR
	TDUR=V(IT3)
	IF(BT.GE.TBG+TDUR)GO TO 3155
	T1=V(IT3+1)
	T2=V(IT3+2)
	X=2.*TDUR/(T1+T2)
	AC=2.*(TDUR-T1*X)/X**2
6203      RA=PR 
	IF(BT.EQ.TBG)XT(J)=T1
	K=IT3
      RC=0  
	RD=1.
      KA=1  
      RB=0  
      Z=TDUR+TBG-BT     
      X=T1  
      Y=T2  
	YY=AC
      CHN=TBG     
      ZZ=TDUR     
      GO TO 4020  
8203	P2=RA*RD
CC7203	K=P2*TF*T4+.5
CCC7203	X=P2*TF*T4
7203	P2=P2*T4
	X=P2*TF
	K=X+.5
      IF(X.LT.0)K=X-.5
CC****** JUN 29,71
72031	ROFF(J)=ROFF(J)+K-X
	IF(ABS(ROFF(J)).LT.1.)GO TO 7155
	Y=1.
	IF(ROFF(J))Y=-1.
	K=K-Y
	ROFF(J)=ROFF(J)-Y
C  ROUND-OFF GAP WILL NOT EXCEED .001
7155	PP2=K/1000.
	IF(IPT(J,31).EQ.0)GO TO 6155
	IF(ICT.EQ.-1)GO TO 1170
	X=V(IPT(J,31)+3)
	Y=RAND(1.-X,1.+X)
	X=PP2
	PP2=PP2*Y
	IF(X-PP2+RTF)PP2=X+RTF
	IF(PP2-X+RTF)PP2=X-RTF
C   NEVER MORE THAN .1" DEVIATION WITH RAN TF. (RTF=.05 IN DATA.)
	K=PP2*1000.+.5
	PP2=K/1000.
6155	IF(ICT.GE.0)GO TO 2155
1170      IF(MK.LT.0.OR.PP2.LT.0)GO TO 2022   
CC      IF((BT.EQ.0.AND.J.EQ.1).OR.IPT(J,1).EQ.0)GO TO 203    
CC	KN=IPT(J,1)
CC	IJ=V(KN)
CC	IF(IJ.EQ.5)GO TO 1203
CC	Z=(BT-V(KN+2))/V(KN+3)
CC	IF(Z.GT.1.)Z=1.
CC	Y=V(KN+4)
CC	X=(V(KN+5)-Y)*Z+Y
CC	IF(X.EQ.0)IPT(J,1)=0
CC	GO TO 204
CC1203	X=V(KN+3)
CC204	Y=RAND(0.0,1.0)
CC	IF(Y-X.LT.0)GO TO 2022

      ZPAR=P1
	PX1(J)=P1+PP2
C   ZPAR IS USED HERE WHEN OP1(OMIT) IS .GT.0. OMIT IS IN REAL TIME.
	L=INST(J)
	IGENX=0
	DO 4021 K=1,8
	IF(L.NE.IVG(K))GO TO 4021
	IGENX=K
	GO TO 2170
4021	CONTINUE
	INP(J)=P4
	LK=0
	DO 1021	K=1,NINS
1021	IF(PX1(K).GT.P1)LK=LK+INP(K)
	IF(LK-IAMP-1.LT.0)GO TO 2170
	IAMP=LK
	AMPTIM=P1
2170      IF(P1.LT.OP1)GO TO 2612     
      P1=P1-OP1     
C   PUTS SPACES BETWEEN NOTES .GT. .05" APART
	IF(A.GE.P1)GO TO 3170
	PRINT 902
	A=P1+.05
3170	X=INUM(J)
C  INUM(J)=WHICH INST. DEFINITION BEING USED.
	KL=0
	NL=3
	Y=1.
	IF(IGENX.EQ.0)GO TO 4170
C  IVG(K) HOLDS GEN AND VAR SPECIAL NAMES.
	X=P3
	IF(IGENX.LT.5)GO TO 3021
	NL=2
	Y=4
	GO TO 7170
3021	Y=3.
C  Y=3 FOR 'GENS'. Y=4 FOR 'VARS'.
	DO 5170 K=6,30
	IF(P3.EQ.2.)GO TO 5170
	IF(P(K).EQ.511.)NPA=K
5170	VZ(K)=0
7170	DO 6170 K=2,30
	ML=K+2
	VX(K)=VX(ML)
	IF(ML.GT.NPA)GO TO 5902
	Z=P(ML)
	IF(PL(ML).EQ.2)Z=30.868*2**(Z/12.)
	GO TO 6170
5902	Z=0
6170	VZ(K)=Z
	NPA=NPA-2
	GO TO 8170
4170	IF(PL(3).EQ.2.)KL=P3+.5
	DO 2021 K=3,30
	IF(K.GT.NPA)GO TO 4902
	Z=P(K)
	IF(PL(K).EQ.2)Z=30.868*2**(Z/12.)
	GO TO 2021
4902	Z=0
2021	VZ(K)=Z
	VZ2=PP2*DF
C  DUTY FACTOR CONVERSION
8170	IF(KL.GT.0)PRINT 2902,L,P1,X,VZ2,VZ(3),SCAL(KL),(VZ(K),K=4,
	111),L,ICT,BT
	IF(KL.EQ.0.)PRINT 9902,L,P1,X,(VZ(K),K=2,11),L,ICT,BT
C   'NOTES' MAY BE USED IN P3-30 BUT LETTER NAME WILL ONLY PRINT FOR P3!
      IF(NPA.GT.11)PRINT 3902,(VZ(K),K=12,23),L,ICT,BT
C  VX(K) HOLDS CONVERSION FLAG.
	VY(2)=VZ2
	DO 1902 K=NL,NPA
	Z=VZ(K)
	IF(VX(K).EQ.1.)Z=CVTX/Z
	IF(VX(K).EQ.-1.)Z=CVTX*Z
1902	VY(K)=Z
	NPA=NPA+1
	VY(NPA)=CVTX/VZ2
C   LAST PARAM NOW CONVERTED AS NOTE DUR.   PASS3 WILL READ NEXT.
	IF(Y.NE.1.)NPA=NPA-1
	L=NPA+2
	PRINT 3612,L,Y,P1,X,(VY(K),K=2,NPA)
	WRITE (NWRITE)L,Y,P1,X,(VY(K),K=2,NPA)
2612      P1=ZPAR     
         GO TO 21 
3612	FORMAT(I3,F3.0,F7.2,F3.0,F7.2,30F9.3)
2902  FORMAT(1XA4,1XF7.2,F3.0,F7.2,F8.2,'(',A3,')',8F8.2,'< ',A4,' <',
	1I3,F7.2)
9902  FORMAT(1XA4,1XF7.2,F3.0,F9.2,3X9F8.2,'< ',A4,' <',I3,F7.2)
3902  FORMAT(3X12F8.2,'< ',A4,' <',I3,F7.2)    
C   PRINTS RESTS  
2022	PP2=ABS(PP2)
C   IN THIS VERSION TYPE 'R' FOR RESTS IN ANY PARAM BUT PP2. 
C   FOR RESTS IN SEQS. TYPE -DUR.   
C   WHEN RANDOM RESTS ARE CHOSEN, SEQS. MISS NOTES.  RAN RESTS ARE NOT TOUCHED BY SUBROUTINES!!!
	INP(J)=0
	PX1(J)=P1+PP2
	IF(P1.LT.OP1)GO TO 21   
      X=P1-OP1  
	IF(A.GE.X)GO TO 121
	PRINT 902
	A=X+.05
121      PRINT 104,INST(J),X,PP2,ICT
21	PR=ABS(PR)
      BG(J)=BT+PR 
      IF(ICT.EQ.DUR(J)-10000.)GO TO 5174 
      IF(BG(J).LT.DUR(J))GO TO 500  
5174      BG(J)=19999. 
      DO 3174 K=1,NINS  
C   INSERTS CANT FOLLOW LAST REGULAR NOTE.(ADD REST IF INSERT AT END IS NEEDED.)    
3174      IF(BG(K).LT.19999.)GO TO 500     
      GO TO 175   
C   CHOOSES INST WITH NEXT BEGIN TIME.    
500      J=1   
	BW=BT
	IF(NINS.EQ.1)GO TO 3022
5022	IF(BG(J).NE.19999.)GO TO 4022
	J=J+1
	GO TO 5022
4022	DO 22 K=2,NINS
22	IF((PX1(J).GT.PX1(K)).AND.(BG(K).NE.19999.))J=K
3022      BT=BG(J)    
      IF((BT.EQ.19999.).OR.(PX1(J).GE.DURX))GO TO 175
	IF(CNT(J).GT.0)GO TO 1022
      IF(CNT(J).EQ.0)PX1(J)=0  
      IF(CNT(J).EQ.-1)CNT(J)=0
C   N.B. 'TF' CONTROLS BG TIME WHEN BG .GT. 0   
1022      IF((BT.LT.T6).OR.(IT3.GT.1))GO TO 10    
      T4=T2 
      T5=0  
      T6=10000.   
      GO TO 10    
175	Y=0
	DO 105 K=1,NINS
	X=PX1(K)-OP1
105	IF(Y.LT.X)Y=X
	Y=Y+.5
C  ADDS .5" OF SILENCE.
      PRINT 7902, Y
	L=2
	Z=6.
	PRINT 3612,L,Z,Y
      WRITE(NWRITE),L,Z,Y
7902  FORMAT(' TER',F10.3,';'/)
603	FORMAT(I3,' INSTS.  DURATIONS=',10F8.2)
	TYPE 1603,AMPFAC,IAMP,AMPTIM
	PRINT 1603,AMPFAC,IAMP,AMPTIM
	DO 2175 K=1,NINS
2175	P(K)=PX1(K)-OP1
	PRINT 603,NINS,(P(K),K=1,NINS)
	TYPE 603,NINS,(P(K),K=1,NINS)
	CALL EXIT
104	FORMAT(' ****',A4,2F9.3,7X,'REST  <',I3)
1603	FORMAT(' AMPL. FACTOR=',F4.2,', MAX.AMP.=',I4,', AT TIME',
	1 F8.3)
4020  RD=1  
      IF(RA.LT.0)RD=-1. 
      RA=RA*RD    
      IF(KA.EQ.0)RA=RA-RC     
      W=RA  
      RB=W  
      IF(W.LE.Z)GO TO 2020    
      IF(Z.NE.0)GO TO 3020    
      RA=RA/Y     
      RB=-1.
      RC=0  
      GO TO 8020  
3020      W=Z     
      RC=W+RC     
      GO TO 24    
2020      RC=0    
24	IF(X.NE.Y)GO TO 424
	RA=W/X
	GO TO 8020
C  DUR OF TMP + BG TIME OF TMP - NOTE VALUE - BG TIME OF NOTE.  CHN=TBG.
424	RAX=XT(J)
	RA=(-2.*RAX+(4.*RAX**2+8.*YY*W)**.5)/(2.*YY)
	XT(J)=RAX+YY*RA
8020      IF(KA.EQ.0)RA=RA+XA 
      KA=1  
	IF(RC.EQ.0)GO TO 8203
2011      XA=RA   
	IF(K.GT.1)GO TO 9920
	K=I-6
      ZPAR=-9900.-CHN-ZZ
      DO 3011 KL=8,I     
      IF((V(K).EQ.ZPAR).AND.(V(K+1).EQ.990000.))GO TO 9920    
3011      K=K-1
9920      W=ZZ  
	IF(V(K+3).LT.0)K=K+3
C   ABOVE IS FOR TYPED IN ITMPO CHANGES
	KA=K+3
      ZZ=V(KA)
C   DUR OF NEXT TEMPI
	X=V(KA+1)
	Y=V(KA+2)
213      KA=0  
      Z=ZZ  
	YY=2.*Z/(X+Y)
	IF(YY.NE.0)YY=2.*(Z-X*YY)/YY**2
      CHN=CHN+W   
	XT(J)=X
      IF(KA.EQ.1)Z=0    
      RA=PR 
	KA=0
	K=K+3
	GO TO 4020
	END


	SUBROUTINE SUBR
	COMMON/X/P(30),INST,IPAR,CNT(10),BT,IREST,CVT(35),PL(30),DF
C   INST=INST N.  IPAR=PARAM N.  WHEN SUBROUTINE IS CALLED
C   SET CVT(NPAR) TO -1.(FREQ), 0(AMPL.) OR 1.(DUR.) WHERE NPAR=PAR. TO BE CONVERTED
C   IF NOTE NUMBERS ARE TO BE USED, SET PL(NPAR)=2.
C   TO CREATE A REST IREST=-1.  BT=BASIC TIME (P1 BEFORE TEMPO OR TF CHANGES.)

	P(IPAR)=46.
	IF(IPAR.EQ.10)RETURN
	CVT(IPAR)=-1.
	PL(IPAR)=2.
C   P10=46.  P11=440HZ
	RETURN
	END